package day26;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.SplittableRandom;

//通过反射获取类中的资源
public class Demo {
    public static void main(String[] args) throws ClassNotFoundException {
        //1.获取Class对象，通用
        Class c1=Person.class;

//        Person p=new Person();
//        Class c2=p.getClass();

        Class c3=Class.forName("day26.Person");

        //2.通过Class对象获取类中的任意资源
        //c1.getXXX();
        String name=c1.getName();
        System.out.println("全类名:"+name);
        String name2=c1.getSimpleName();
        System.out.println("类名:"+name2);
        String name3=c1.getSuperclass().getName();
        System.out.println("父类全类名:"+name3);

        System.out.println("********获取属性*********");
        //获取类中不包括父类的属性

        Field fs[]=c1.getDeclaredFields();
        for (Field f:fs){
             String filedName=f.getName();
             Class type=f.getType();
             System.out.println("属性名:"+filedName+",类型:"+type);
        }

        System.out.println("********获取属性*********");
        //获取类中所有的公开资源(包括本类的和父类的)
        Field fs2[]=c1.getFields();
        for (Field f:fs2){
            String filedName=f.getName();
            Class type=f.getType();
            System.out.println("属性名:"+filedName+",类型:"+type);
        }
        System.out.println("*********获取构造方法*******8");
////        Constructor cons[]=c2.getDeclaredConstructors();
//        for (Constructor c:cons){
//            String methodName=c.getName();
//            Class cs[]=c.getParameterTypes();
//            System.out.println("方法名:"+methodName+",参数："+ Arrays.toString(cs));
//        }

        System.out.println("*********方法********");
        Method ms[]=c3.getDeclaredMethods();
        for (Method m:ms){
          String methodName=m.getName();
           Class cs[]= m.getParameterTypes();
           Class returnTye= m.getReturnType();
           System.out.println("方法名:"+methodName+",参数:"+Arrays.toString(cs)+",返回值类型:"+returnTye);
        }
    }
}

